@echo off
rem 使用清华源创建单个Conda环境的批处理脚本
rem 使用方法:
rem 1. 显示所有可用环境: create_conda_env.bat list
rem 2. 创建指定环境: create_conda_env.bat 环境文件名.yml
rem 3. 指定环境名称: create_conda_env.bat 环境文件名.yml 环境名称

setlocal enabledelayedexpansion

set ENV_DIR=conda_environments
set TSINGHUA_MIRROR=https://mirrors.tuna.tsinghua.edu.cn/anaconda

rem 检查环境目录是否存在
if not exist %ENV_DIR% (
    echo 错误: 找不到环境目录 %ENV_DIR%
    goto :eof
)

rem 如果参数是"list"则列出所有可用环境
if "%1"=="list" (
    echo 可用的环境文件:
    for %%f in (%ENV_DIR%\*.yml) do (
        echo - %%~nxf
    )
    goto :eof
)

rem 检查是否提供了环境文件参数
if "%1"=="" (
    echo 请提供环境文件名或使用 'list' 查看可用环境
    echo 使用方法:
    echo   create_conda_env.bat list                - 列出所有可用环境
    echo   create_conda_env.bat 环境文件名.yml         - 创建指定环境
    echo   create_conda_env.bat 环境文件名.yml 环境名称 - 创建指定环境并命名
    goto choose_env
)

rem 使用提供的参数创建环境
set ENV_FILE=%1
set CUSTOM_ENV_NAME=%2
goto create_env

:choose_env
echo.
echo 请选择要创建的环境文件:
set /a counter=1
for %%f in (%ENV_DIR%\*.yml) do (
    echo !counter!. %%~nxf
    set "env_!counter!=%%~nxf"
    set /a counter+=1
)

set /a counter-=1
set /p choice=请输入选项编号: 

if %choice% LSS 1 (
    echo 无效的选择
    goto :eof
)
if %choice% GTR %counter% (
    echo 无效的选择
    goto :eof
)

set ENV_FILE=!env_%choice%!

rem 询问用户是否要指定环境名称
set /p ask_name=是否要指定自定义环境名称? (y/n): 
if /i "%ask_name%"=="y" (
    set /p CUSTOM_ENV_NAME=请输入环境名称: 
    if "!CUSTOM_ENV_NAME!"=="" (
        echo 未指定环境名称，将使用配置文件中的默认名称
    )
)

:create_env
rem 检查环境文件是否存在
if not exist %ENV_DIR%\%ENV_FILE% (
    echo 错误: 环境文件 %ENV_FILE% 不存在
    goto :eof
)

echo 正在使用文件 %ENV_FILE% 创建conda环境...

rem 设置清华镜像源
echo 配置清华镜像源...
call conda config --set show_channel_urls yes
call conda config --add channels %TSINGHUA_MIRROR%/cloud/conda-forge
call conda config --add channels %TSINGHUA_MIRROR%/pkgs/free
call conda config --add channels %TSINGHUA_MIRROR%/pkgs/main
echo 已配置清华镜像源

rem 创建环境
echo 开始创建环境，这可能需要一些时间...

rem 构建命令
set CMD=conda env create -f "%ENV_DIR%\%ENV_FILE%"

rem 如果指定了环境名称，添加到命令中
if not "%CUSTOM_ENV_NAME%"=="" (
    set CMD=%CMD% -n "%CUSTOM_ENV_NAME%"
    echo 将使用自定义环境名称: %CUSTOM_ENV_NAME%
)

rem 执行命令
call %CMD%

if %ERRORLEVEL% NEQ 0 (
    echo 环境创建失败，返回码: %ERRORLEVEL%
) else (
    echo 环境创建成功!
)

endlocal 